package Classic;

public class Demo004 {
    static int count=0;
    public static void run(){
        int[] arr={1,2,3,4,5,6,7,8};
        int[] newArr=new int[arr.length];
        int[] used=new int[arr.length];

//        bahuanghou(arr,newArr,used,0);
        panduan(new int[]{8,7,6,5,4,3,2,1});
        System.out.println(count);

    }

    public static boolean panduan(int[] zuobiao){
        int[][] martix=new int[8][8];
        for(int i=0;i<zuobiao.length;i++){
            martix[i][zuobiao[i]-1]=1;
        }

        for(int k=0;k<zuobiao.length;k++){
            for(int o=0;o<zuobiao.length;o++){
                System.out.print(martix[k][o]+ " ");
            }
            System.out.println();

        }
        System.out.println();

        for(int i=0;i<zuobiao.length;i++){

            int row=i;
            int col=zuobiao[i]-1;
//            if(martix[row][col]!=1)
//                return false;
            //左上
            while (--row>=0 && --col>=0){
                martix[row][col]=0;
            }
            //右上
            row=i;
            col=zuobiao[i]-1;
            while (--row>=0 && ++col<8){
                martix[row][col]=0;
            }
            //左下
            row=i;
            col=zuobiao[i]-1;
            while (++row<8 && --col>=0){
                martix[row][col]=0;
            }
            //右下
            row=i;
            col=zuobiao[i]-1;
            while (++row<8 && ++col<8){
                martix[row][col]=0;
            }


            for(int k=0;k<zuobiao.length;k++){
                for(int o=0;o<zuobiao.length;o++){
                    System.out.print(martix[k][o]+ " ");
                }
                System.out.println();

            }
            System.out.println();
        }

        for(int i=0;i<zuobiao.length;i++){
            if(martix[i][zuobiao[i]-1]!=1)
                return false;
        }
        for(int i=0;i<zuobiao.length;i++){
            for(int j=0;j<zuobiao.length;j++){
                System.out.print(martix[i][j]+ " ");
            }
            System.out.println();
        }
        for(int i=0;i<zuobiao.length;i++){
            System.out.print(zuobiao[i]);
        }
        System.out.println();

        return true;
    }

    /*
    先把1~8 所有排列数枚举出来
     */
    public static void bahuanghou(int[] arr,int[] newArr,int[] used,int index){
        //递归终止条件
        if(index==arr.length){
//            for (int i:newArr
//                 ) {
//                System.out.print(i+ " ");
//
//            }
//            System.out.println();
            //输出矩阵
            if(panduan(newArr)==true)
                count++;
        }

        else {
            //循环从集合arr中往新数组里添一个数
            for(int i=0;i<arr.length;i++){
                //如果该数已经用过，则跳过
                if(used[i]==1)
                    continue;
                else {
                    newArr[index]=arr[i];
                    used[i]=1;
                    bahuanghou(arr,newArr,used,index+1);//填充后一位数
                    used[i]=0;
                }
            }
        }
    }
}
